/*
* Copyright (C) 2019 ~ 2022 Uniontech Software Technology Co.,Ltd.
*
* Author:     yanghongwei <yanghongwei@uniontech.com>
*
* Maintainer: yanghongwei <yanghongwei@uniontech.com>
*/

#include "abstractnotify.h"

#include <functional>
#include <iostream>

using namespace std;

AbstractNotify::AbstractNotify()
{
}

AbstractNotify::~AbstractNotify()
{
}

/**
 * @brief 启动监听线程
 * @return true 启动成功，false 启动失败
 */
bool AbstractNotify::start()
{
    // 创建线程执行真正的run
    std::thread(&AbstractNotify::run, this).detach();
    return true;
}

/**
 * @brief 设置监听事件回调函数
 * @param fun 回调函数
 * @param object 回调对象
 */
void AbstractNotify::setNotifyCbFun(const NotifyCallBackFun &fun, AbstractNotifyProcess *object)
{
    // 如果存在该回调对象则不再进行缓存
    if (mapCallbackFuns.count(object)) {
        return;
    }

    // 缓存回调数据
    mapCallbackFuns[object] = fun;
}

/**
 * @brief 取消监听事件回调函数
 * @param object 回调对象
 */
void AbstractNotify::unSetNotifyCbFun(AbstractNotifyProcess *object)
{
    // 如果存在该回调对象则不再进行缓存
    if (mapCallbackFuns.count(object)) {
        mapCallbackFuns.erase(object);
    }
}
